package edu.mercer.medapps.documentbldr;

import com.google.common.collect.ImmutableSet;

/**
 * Analysis, in-depth information of provided Document.<p>
 * 
 * Intended usage with Document. Does not extend Document as this properties() 
 * would be unwanted.<p>
 * 
 * <ul>
 * <li> Enumeration constants for common values, usable for property keys.<p>
 * 
 * <li> W Generic Information type returned.<p>
 * 
 * <li> Z Generic Properties type supplied as part of Document.<p>
 * 
 * <li> E Generic Checked exception.<p>
 * 
 * </ul>
 * 
 * Generic usage allows for variety of collections or other objects for W, Z, 
 * and Checked Exception(s) E.<p>
 * 
 * @see Document
 */

public interface DocumentInformation<W,Z,E extends Exception>
{
	enum QUALITIES
	{
		GROUP ("AlphaGrp"),

		PATTERN ("(?<AlphaGrp>[\\w]{2,20})");

		private String _value = ""; 
		
		
		QUALITIES(final String valueIn)
		{ 
			_value = valueIn;
		
		}//constructor
		
		
		@Override
		public String toString()
		{
			return _value;
			
		}//method
		
		
	}//enum
	
	
	enum FEATURES
	{
		/** Long - document last modified seconds since epoch */
		
		MODIFIED ("modified"),
		
		/** Long - document file size */
		
		SIZE ("size"),
		
		/** @see EXPOSED */
		
		SET;
				
		/** 
		 * ImmutableSet - Collection, read-only, contains enumeration values<p> 
		 * 
		 * As defined in FEATURES; i.e., "modified", "size"<p>
		 */
		
		final ImmutableSet<String> EXPOSED = ImmutableSet.of(
				"modified", 
				"size");
		
		private String _value = "";
		
		private FEATURES(){} //constructor
				
		private FEATURES(final String valueIn)
		{
			_value = valueIn;
			
		} //constructor

		
		/** @return String - enumeration constant String value */
		
		public String text(){ return _value; }

		@Override
		public String toString(){ return text(); }

		
	}//enum
	
	
	/**
	 * Analyze Document for word-related information.<p>
	 * 
	 * @return W - Generic with Document's word-related statistical data
	 */
	
	W lexical() throws E;
	
	
	/**
	 * Analyze Document for file, other system information.<p>
	 * 
	 * @return W - Generic with Document's file, other system statistical data
	 */
	
	W technical() throws E;


}//interface
